package com.webermagem.DAO;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.AliasToBeanResultTransformer;

import com.webermagem.model.Diagnostico;
import com.webermagem.util.BDUtil;
import com.webermagem.util.HibernateUtil;

public class DiagnosticoDAO extends GenericDAO implements Serializable{
	
	private static final long serialVersionUID = -7979448639166049578L;

	public DiagnosticoDAO(){
		
	}
	
	@SuppressWarnings("unchecked")
	public List<Diagnostico> listByDescricao(Session session, String descricao) {
		
		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		Query query = session.createQuery(" from Diagnostico where lower(descricao) like :descricao order by id");
		query.setString("descricao", "%" + descricao.toLowerCase() + "%");
		List<Diagnostico> objetoRetornado = query.list();
		session.flush();
		
		return objetoRetornado;
	}
	
	public Object getByDescricao(Session session, String descricao) {

		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		Query query = session.createQuery("from Diagnostico where descricao = :descricao order by id");
		query.setString("descricao", "%" + descricao.toLowerCase() + "%");
		query.setParameter("descricao", descricao);
		Object objetoRetornado = query.uniqueResult();
		
		session.flush();
		
		return objetoRetornado;
	}
	
	@SuppressWarnings("unchecked")
	public List<Diagnostico> listOrdenado(Session session) {
		
		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		Query query = session.createQuery(" from Diagnostico order by id");
		List<Diagnostico> objetoRetornado = query.list();
		session.flush();
		
		return objetoRetornado;
		
	}

	@SuppressWarnings({ "unchecked" })
	public List<Diagnostico> listBySintomas(Session session, List<Long> listaSintomas) {
		
		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		// TODO VERIFICAR COMO RECUPERAR SCHEMA
		SQLQuery query = session.createSQLQuery("select d.id, d.descricao " +
				 "from webermagem.tb_diagnosticos d, webermagem.tb_sint_diag s " +
				 "where " + BDUtil.gerarInDiagnostico(listaSintomas) + 
				 " and d.id = s.id_diagnostico" +
				 " group by d.id, d.descricao" +
				 " order by d.id, d.descricao");

		List<Diagnostico> objetoRetornado = query.setResultTransformer(new AliasToBeanResultTransformer(Diagnostico.class))
					    .list();
		
		session.flush();
		
		return objetoRetornado;
		
	}
	
}
